['Use Cipheriv for counter mode of aes-256-ccm'],
['Use Cipheriv for counter mode of aes-256-ccm'],
['Use Cipheriv for counter mode of aes-256-ccm'],
- ['Use Cipheriv for counter mode of aes-128-ccm'],
];
const expectedDeprecationWarnings = [
const iv = Buffer.alloc(12);
const opts = { authTagLength: 10 };
+ const control = crypto.createCipheriv(algo, key, iv, opts);
+ control.update(Buffer.alloc(0));
+ control.final();
+ const expectedTag = control.getAuthTag();
+
for (const cipher of [
- crypto.createCipher(algo, 'foo', opts),
crypto.createCipheriv(algo, key, iv, opts),
]) {
- assert.throws(() => {
- cipher.final();
- }, common.hasOpenSSL3 ? {
- code: 'ERR_OSSL_TAG_NOT_SET'
- } : {
- message: /Unsupported state/
- });
+ let output;
+ try {
+ output = cipher.final();
+ } catch (err) {
+ // OpenSSL without https://github.com/openssl/openssl/pull/32427
+ // cannot finalize an empty CCM message unless update() was called.
+ if (common.hasOpenSSL3) {
+ assert.strictEqual(err.code, 'ERR_OSSL_TAG_NOT_SET');
+ } else {
+ assert.match(err.message, /Unsupported state/);
+ }
+ }
+
+ if (output !== undefined) {
+ assert.deepStrictEqual(output, Buffer.alloc(0));
+ assert.deepStrictEqual(cipher.getAuthTag(), expectedTag);
+ }
}
}